package com.ylbh.modules.goods.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ylbh.common.exception.NormalException;
import com.ylbh.common.pojo.goods.dto.GoodsDTO;
import com.ylbh.common.pojo.goods.dto.GoodsDetailsDTO;
import com.ylbh.common.pojo.goods.dto.GoodsListDTO;
import com.ylbh.common.pojo.goods.dto.PoiZonGoodsDTO;
import com.ylbh.common.pojo.goods.vo.GoodsDetailsVO;
import com.ylbh.common.pojo.goods.vo.GoodsQueryVO;
import com.ylbh.common.utils.CommonResult;
import com.ylbh.common.utils.PageDTO;
import com.ylbh.common.utils.PageUtils;
import com.ylbh.modules.accessory.CombinedCommodities;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 *
 *
 * @author czx
 * @date 2019-04-23 15:17:38
 */
public interface ShoppingGoodsService extends IService<GoodsDTO> {

    /**
     * 商品信息列表
     * @param goodsListDTO
     * @return
     */
    PageUtils queryGoodsList(GoodsListDTO goodsListDTO);

    /**
     * 商品信息详情
     * @param id
     * @return
     */
    GoodsDetailsVO getGoodsById(Long id);

    /**
     * 修改商城商品信息详情
     * @param goodsDetailsDTO
     * @return
     */
    CommonResult<String> modifyGoodsById(GoodsDTO goodsDetailsDTO, Long userId);

    /**
     * 批量修改状态
     * @param type
     * @param ids
     */
    void batchModifyState(String type, Integer[] ids);

    /**
     * 修改商城商品sku信息详情
     * @param updateGoodsDetailsDTO
     */
    void modifySkuById(GoodsDetailsDTO updateGoodsDetailsDTO);

    /**
     * 保存商品信息
     * @param goodsDTO
     */
    CommonResult add(GoodsDTO goodsDTO, Long userId);

    /**
     * 商城商品导出
     * @param response
     * @param request
     */
    void goodsExcel(HttpServletResponse response, HttpServletRequest request) throws NormalException;

    /**
     * 通过创建时间修改商品新品上架状态
     */
    void modifyIsNewByAddTime();

    void modifyPriceType();

    /**
     * 查询所有商品的图片地址
     * @return
     */
    List<GoodsQueryVO> queryGoodsImages();

    /**
     * 在列表查看对应sku查询是否已经是活动商品
     * @param id
     * @return
     */
    GoodsDetailsVO getIsActivityGoodsById(Long id);

    List<String> getGoodsCount();

    /**
     * 商城合并，查询商品
     */
    List<GoodsDTO> getAllGoods();

    /**
     * 商城合并，查询规格属性名
     */
    List<String> getSpecValueById(List<String> ids);

    /**
     * 批量修改合并后的商品
     * @param list
     */
    void modifyMergeGoodsById(CombinedCommodities list);

    /**
     * 查看对应商品评论
     * @param pageDTO
     * @return
     */
    PageUtils getGoodsCommentById(PageDTO pageDTO);

    /**
     * 根据品牌ID查询该商品总数
     */
    Integer getCountByBrandId(String sku);

    /**
     * 删除商品评论
     * @param ids
     */
    void removeGoodsCommentByIds(List<String> ids);

    /**
     * 查询该商品是否添加过
     * @param sku
     * @return
     */
    int selectSku(String sku);

    /**
     * 计算商品的利润
     */
    void modifyGoodsCostingPrice();

    /**
     * 解析数据
     * @param dto
     */
    GoodsDetailsVO analyticalData(PoiZonGoodsDTO dto);

    /**
     * 上传商品详情图片
     * @param goodsDTO
     * @return
     */
    String uploadGoodsDetails(GoodsDTO goodsDTO);

    /**
     * 修改商品展示详情
     * @param dto
     */
    void updateGoodsDetailsBySku(GoodsDTO dto);

    /**
     * 获取特定时间内的商品
     * @return
     */
    List<GoodsDTO> queryGoodsByTime();

    /**
     * 上传商品验证型号是否已存在
     * @param goodsSerial
     * @return
     */
    int verificationGoodsSerial(String goodsSerial);

    /**
     * 修改商品的规格重量
     * @param id
     * @param goodsInventoryDetail
     */
    void modifyGoodsWeight(Integer id, String goodsInventoryDetail);
}

